// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); WinSpirit Online Casino Australia Explore the Best Bonuses and Promotions – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

WinSpirit Online Casino Australia Explore the Best Bonuses and Promotions

Welcome to WinSpirit Casino, where excitement meets opportunity! Whether you’re using the WinSpirit app or playing on winspirit.com, your journey to big wins starts here.

Explore the latest WinSpirit bonus code offers and unlock exclusive rewards. With glowing WinSpirit casino reviews, it’s clear why players love ws casino for its top-notch games and unbeatable promotions.

Join Win-Spirit today and experience the magic of Win Spirit Casino – your ultimate destination for fun and fortune!

WinSpirit Online Casino Australia: Unlock Exciting Bonuses Today

Discover the thrill of WinSpirit Casino and unlock a world of exclusive bonuses designed to elevate your gaming experience. Whether you’re a new player or a seasoned pro, the winspirit bonus code offers you the chance to boost your bankroll and enjoy more spins, more wins, and more fun.

Download the winspirit app today and take your gaming on the go. With seamless access to win-spirit games and promotions, you’ll never miss out on the action. Explore the latest winspirit casino reviews to see why players are raving about this top-rated platform.

At win spirit casino, every deposit comes with exciting rewards. From welcome bonuses to daily deals, winsprit ensures you’re always in for a treat. Visit winspirit.com now and start your journey to big wins!

Why Choose WinSpirit Online Casino in Australia?

WinSpirit Casino stands out as a top choice for Australian players seeking a premium gaming experience. With its user-friendly WinSpirit app, you can enjoy seamless gameplay on the go, anytime and anywhere. The platform, accessible via winspirit.com, offers a wide range of games, from slots to live dealer options, ensuring endless entertainment.

WS Casino is renowned for its generous promotions, including exclusive WinSpirit bonus codes that boost your bankroll. Whether you’re a new player or a loyal member, the WinSpirit bonus system rewards you at every step. Dive into the excitement and discover why WinSpirit Casino reviews consistently highlight its reliability and exceptional service.

Win-Spirit Casino prioritizes security and fairness, ensuring a safe environment for all players. The Win Spirit Casino platform is licensed and regulated, providing peace of mind while you play. Join WinSpirit today and experience the ultimate online casino adventure tailored for Australian players!

Explore the Best Welcome Bonuses at WinSpirit

Discover the ultimate gaming experience with WinSpirit Casino and its unbeatable welcome bonuses. Whether you’re a new player or a seasoned gamer, WinSpirit offers exclusive rewards to kickstart your journey. Use the WinSpirit bonus code during registration to unlock extra perks and maximize your winnings.

Download the WinSpirit app to enjoy seamless gameplay and access your bonuses on the go. With WS Casino, you’ll find a wide range of games and promotions tailored to suit every player. Check out WinSpirit Casino reviews to see why players love this platform and its generous offers.

Visit winspirit.com today and explore the exciting world of Win-Spirit. Don’t miss out on the chance to elevate your gaming experience with the best welcome bonuses in Australia!

Daily and Weekly Promotions for Australian Players

At WinSpirit Online Casino Australia, we believe in keeping the excitement alive with our exclusive daily and weekly promotions. Whether you’re a new player or a loyal member, there’s always something special waiting for you at winspirit.com.

Promotion
Details
How to Claim

Daily Cashback Get up to 20% cashback on your losses every day. Perfect for keeping the fun going! Opt-in via the Promotions page. No winspirit bonus code required. Weekly Free Spins Unlock 50 free spins every Friday on selected slots. Check winspirit casino reviews to see what players love about this offer! Deposit $20 or more during the week to qualify. Loyalty Rewards Earn points every time you play at win spirit casino and exchange them for bonuses or cash. Points are automatically added to your account. Visit ws casino for more details.

Don’t miss out on these incredible offers at win-spirit. Stay updated by visiting winspirit.com regularly and make the most of your gaming experience!

How to Claim Your WinSpirit Casino Bonuses

Claiming your bonuses at WinSpirit Casino is quick and easy. Whether you’re using the WinSpirit app or accessing winspirit.com on your desktop, follow these simple steps to unlock exciting rewards.

First, create an account at WS Casino or log in if you’re already a member. Navigate to the “Promotions” section to explore the latest offers. From welcome bonuses to daily deals, WinSpirit ensures there’s something for everyone.

Once you’ve chosen a bonus, check the terms and conditions. Some promotions may require a bonus code, which you can enter during the deposit process. For Win-Spirit bonuses, ensure your account is funded with the minimum required amount.

After meeting the criteria, your bonus will be credited automatically. If you encounter any issues, consult WinSpirit Casino reviews or contact customer support for assistance. Enjoy your rewards and elevate your gaming experience with WinSprit!

Maximizing Your Winnings with WinSpirit Bonus Offers

At WinSpirit Casino, players have the opportunity to boost their gaming experience and increase their chances of winning with exclusive bonus offers. Whether you’re a new player or a seasoned pro, these bonuses are designed to give you an edge. Here’s how you can make the most of them:

  • Use the WinSpirit Bonus Code: Always check for the latest WinSpirit bonus codes before making a deposit. These codes unlock special promotions, free spins, and deposit matches to maximize your bankroll.
  • Download the WinSpirit App: The WinSpirit app ensures you never miss out on exclusive offers. With push notifications, you’ll be the first to know about new bonuses and promotions.
  • Explore WS Casino Promotions: Regularly visit the promotions page on WinSpirit Casino to discover limited-time offers tailored to your favorite games.
  • Read WinSpirit Casino Reviews: Gain insights from other players about the best strategies to use with WinSpirit bonuses. Their experiences can help you optimize your gameplay.
  • Play Responsibly: While bonuses enhance your chances, it’s essential to manage your bankroll wisely. Set limits and enjoy the thrill of Win-Spirit Casino responsibly.
  • Stay Updated: Follow WinSpirit on social media or subscribe to their newsletter to stay informed about upcoming bonus opportunities.
  • With the right approach, Win Spirit Casino bonuses can significantly enhance your gaming experience. Start using these tips today and watch your winnings grow!

    WinSpirit Loyalty Program: Rewards for Every Player

    At WinSpirit Casino, we believe in rewarding our loyal players with exclusive perks and benefits. The WinSpirit Loyalty Program is designed to enhance your gaming experience, offering rewards that grow with every bet you place. Whether you’re a casual player or a high roller, WinSpirit ensures that your dedication is recognized and rewarded.

    Earn points with every game you play on the WinSpirit app or website, and watch as your loyalty level rises. From cashback offers to personalized bonuses, the WinSpirit Loyalty Program has something for everyone. Plus, don’t forget to use your WinSpirit bonus code to unlock even more rewards as you climb the tiers.

    Join the Win-Spirit community today and discover why WinSpirit Casino reviews consistently highlight our commitment to player satisfaction. With WinSpirit.com, every spin, every win, and every moment counts towards your next big reward!

    Join WinSpirit Online Casino and Start Winning Now

    Discover the thrill of gaming at WinSpirit Casino, where excitement and rewards await you. Whether you’re a seasoned player or new to online casinos, WinSpirit.com offers an unparalleled experience with its wide range of games and exclusive bonuses.

    • Sign up today and claim your WinSpirit bonus code to unlock amazing rewards.
    • Download the WinSpirit app for seamless gaming on the go.
    • Explore the best games at WS Casino and enjoy a user-friendly interface.

    Why choose Win-Spirit Casino? Here’s what makes us stand out:

  • Generous bonuses and promotions tailored for every player.
  • Fast and secure transactions for hassle-free deposits and withdrawals.
  • A diverse selection of games, from slots to live dealer options.
  • Don’t wait any longer! Join WinSprit now and start your journey to big wins. Visit WinSpirit.com or download the app today!

    Design and Develop by Ovatheme